package Controller.Facade;

import Controller.ValidaLista;
import Model.BD.DAO;
import Model.Previsao;
import com.icesoft.faces.component.jsfcl.data.DefaultSelectionItems;
import java.lang.reflect.Method;
import java.util.List;

public class IceDecorator extends FacadeIMPL {

   private Class classeBO;
   ValidaLista validaLista = new ValidaLista();

   public IceDecorator(Class classeBO) {
      super(classeBO);
      this.classeBO = classeBO;
   }

   public DefaultSelectionItems montaCombo() {
      DefaultSelectionItems itens = new DefaultSelectionItems();
      itens.clear();
      try {
         Object obj = classeBO.newInstance();
         Method mtdDAO = classeBO.getMethod("getDAO");
         DAO dao = (DAO) mtdDAO.invoke(obj);
         List lista = dao.consultarOrdenado();
         Method pegaCombo = classeBO.getMethod("montaLista", new Class[]{List.class});
         itens = (DefaultSelectionItems) pegaCombo.invoke(obj, lista);
      } catch (Exception ex) {
         
      }
      return itens;
   }
    public DefaultSelectionItems montaComboSemNomeRepetidoProdutor() {
      DefaultSelectionItems itens = new DefaultSelectionItems();
      itens.clear();
      try {
         Object obj = classeBO.newInstance();
         Method mtdDAO = classeBO.getMethod("getDAO");
         DAO dao = (DAO) mtdDAO.invoke(obj);
         List lista = dao.consultarNotaProdutor();
         lista = validaLista.retiraNomeProdutorRepetido(lista);
         Method pegaCombo = classeBO.getMethod("montaListaProdutor", new Class[]{List.class});
         itens = (DefaultSelectionItems) pegaCombo.invoke(obj, lista);
      } catch (Exception ex) {

      }
      return itens;
   }
        public DefaultSelectionItems montaComboSemNomeRepetidoProdutorRelatorio() {
      DefaultSelectionItems itens = new DefaultSelectionItems();
      itens.clear();
      try {
         Object obj = classeBO.newInstance();
         Method mtdDAO = classeBO.getMethod("getDAO");
         DAO dao = (DAO) mtdDAO.invoke(obj);
         List lista = dao.consultarNotaProdutor();
         lista = validaLista.retiraNomeProdutorRepetido(lista);
         Method pegaCombo = classeBO.getMethod("montaListaProdutorRelatorio", new Class[]{List.class});
         itens = (DefaultSelectionItems) pegaCombo.invoke(obj, lista);
      } catch (Exception ex) {

      }
      return itens;
   }
   public DefaultSelectionItems montaComboSemNomeRepetidoEmpresa() {
      DefaultSelectionItems itens = new DefaultSelectionItems();
      itens.clear();
      try {
         Object obj = classeBO.newInstance();
         Method mtdDAO = classeBO.getMethod("getDAO");
         DAO dao = (DAO) mtdDAO.invoke(obj);
         List lista = dao.consultarNotaProdutorEmpresa();
         lista = validaLista.retiraNomeEmpresaRepetido(lista);
         Method pegaCombo = classeBO.getMethod("montaListaEmpresa", new Class[]{List.class});
         itens = (DefaultSelectionItems) pegaCombo.invoke(obj, lista);
      } catch (Exception ex) {

      }
      return itens;
   }
      public DefaultSelectionItems montaComboSemNomeRepetidoEmpresaRelatorio() {
      DefaultSelectionItems itens = new DefaultSelectionItems();
      itens.clear();
      try {
         Object obj = classeBO.newInstance();
         Method mtdDAO = classeBO.getMethod("getDAO");
         DAO dao = (DAO) mtdDAO.invoke(obj);
         List lista = dao.consultarNotaProdutorEmpresa();
         lista = validaLista.retiraNomeEmpresaRepetido(lista);
         Method pegaCombo = classeBO.getMethod("montaListaEmpresaRelatorio", new Class[]{List.class});
         itens = (DefaultSelectionItems) pegaCombo.invoke(obj, lista);
      } catch (Exception ex) {

      }
      return itens;
   }
   public DefaultSelectionItems montaComboNumNota(String nomeProdutor) {
      DefaultSelectionItems itens = new DefaultSelectionItems();
      itens.clear();
      try {
         Object obj = classeBO.newInstance();
         Method mtdDAO = classeBO.getMethod("getDAO");
         DAO dao = (DAO) mtdDAO.invoke(obj);
         List lista = dao.consultarNotaProdutorNumNota("nomeProdutor", nomeProdutor);
//         lista = validaLista.retiraNumNotaRepetido(lista);
         Method pegaCombo = classeBO.getMethod("montaNumNota", new Class[]{List.class});
         itens = (DefaultSelectionItems) pegaCombo.invoke(obj, lista);
      } catch (Exception ex) {

      }
      return itens;
   }
   public DefaultSelectionItems montaComboAnoNota(String nomeProdutor, String numNota) {
      DefaultSelectionItems itens = new DefaultSelectionItems();
      itens.clear();
      try {
         Object obj = classeBO.newInstance();
         Method mtdDAO = classeBO.getMethod("getDAO");
         DAO dao = (DAO) mtdDAO.invoke(obj);
         List lista = dao.consultarNotaProdutorAno("nomeProdutor","numNota", nomeProdutor,numNota);
//         lista = validaLista.retiraAnoRepetido(lista);
         Method pegaCombo = classeBO.getMethod("montaAno", new Class[]{List.class});
         itens = (DefaultSelectionItems) pegaCombo.invoke(obj, lista);
      } catch (Exception ex) {

      }
      return itens;
   }
   public DefaultSelectionItems montaComboCPFNota(String nomeProdutor, String numNota, int ano) {
      DefaultSelectionItems itens = new DefaultSelectionItems();
      itens.clear();
      try {
         Object obj = classeBO.newInstance();
         Method mtdDAO = classeBO.getMethod("getDAO");
         DAO dao = (DAO) mtdDAO.invoke(obj);
         List lista = dao.consultarNotaProdutorCPF("nomeProdutor","numNota","ano", nomeProdutor,numNota,ano);
         lista = validaLista.retiraCPFRepetido(lista);
         Method pegaCombo = classeBO.getMethod("montaCpf", new Class[]{List.class});
         itens = (DefaultSelectionItems) pegaCombo.invoke(obj, lista);
      } catch (Exception ex) {

      }
      return itens;
   }
      public DefaultSelectionItems montaComboIncraNota(String nomeProdutor, String numNota, String cpf, int ano) {
      DefaultSelectionItems itens = new DefaultSelectionItems();
      itens.clear();
      try {
         Object obj = classeBO.newInstance();
         Method mtdDAO = classeBO.getMethod("getDAO");
         DAO dao = (DAO) mtdDAO.invoke(obj);
         List lista = dao.consultarNotaProdutorCPF("nomeProdutor","numNota","ano", nomeProdutor,numNota,ano);
//         List lista = dao.consultarNotaProdutorIncra("nomeProdutor", "numNota", "cpf", "ano", nomeProdutor, numNota, cpf, ano);
//         lista = validaLista.retiraIncraRepetido(lista);
         Method pegaCombo = classeBO.getMethod("montaIncra", new Class[]{List.class});
         itens = (DefaultSelectionItems) pegaCombo.invoke(obj, lista);
      } catch (Exception ex) {

      }
      return itens;
   }
//   public DefaultSelectionItems montaComboCPFNota(String nomeProdutor, int numNota, int ano) {
//   public DefaultSelectionItems montaComboIncraNota(String nomeProdutor, int numNota, int ano, String CPF) {
   public DefaultSelectionItems montaCombo(int codigo) {
      DefaultSelectionItems itens = new DefaultSelectionItems();
      itens.clear();
      try {
         Object obj = classeBO.newInstance();
         Method mtdDAO = classeBO.getMethod("getDAO");
         DAO dao = (DAO) mtdDAO.invoke(obj);
         List lista = dao.consultar();
         Method pegaCombo = classeBO.getMethod("montaListaNome", new Class[]{List.class});
         itens = (DefaultSelectionItems) pegaCombo.invoke(obj, lista);
      } catch (Exception ex) {

      }
      return itens;
   }

   public DefaultSelectionItems montaComboVinculado(String relacionamento,
           String campoConsultar, int valorConsultar) {
      DefaultSelectionItems itens = new DefaultSelectionItems();
      itens.clear();
      int i = 0;

      try {
         Object obj = classeBO.newInstance();
         Method mtdDAO = classeBO.getMethod("getDAO");
         Method mtdCombo = classeBO.getMethod("montaLista", new Class[]{List.class});
         DAO dao = (DAO) mtdDAO.invoke(obj);
         List lista = dao.consultaComFK(relacionamento, campoConsultar, valorConsultar);
         itens = (DefaultSelectionItems) mtdCombo.invoke(obj, lista);
         
      } catch (Exception ex) {
         
      }
      return itens;
   }
   
   public DefaultSelectionItems montaComboData(String relacionamento,
           String campoConsultar, int valorConsultar)throws Exception {
      DefaultSelectionItems itens = new DefaultSelectionItems();
      itens.clear();
      int i = 0;

      try {
         Object obj = classeBO.newInstance();
         Method mtdDAO = classeBO.getMethod("getDAO");
         Method mtdCombo = classeBO.getMethod("montaListaVinculada", new Class[]{List.class});
         DAO dao = (DAO) mtdDAO.invoke(obj);
         List lista = dao.consultaComFK(relacionamento,campoConsultar, valorConsultar);
         itens = (DefaultSelectionItems) mtdCombo.invoke(obj, lista);

      } catch (Exception ex) {
         throw new Exception(ex);
      }
      return itens;
   }

   public DefaultSelectionItems consultaIncremental(String campoConsultar,
           String valorConsultar) throws Exception {
      DefaultSelectionItems itens = new DefaultSelectionItems();
      itens.clear();
      int i = 0;

      try {
         Object obj = classeBO.newInstance();
         Method mtdDAO = classeBO.getMethod("getDAO");
         Method mtdCombo = classeBO.getMethod("montaLista", new Class[]{List.class});
         DAO dao = (DAO) mtdDAO.invoke(obj);
         List lista = dao.consultarIncremental(campoConsultar, valorConsultar);
         itens = (DefaultSelectionItems) mtdCombo.invoke(obj, lista);
         return itens;
      } catch (Exception ex) {
         throw new Exception(ex.getMessage());
      }
   }
   public DefaultSelectionItems consultaIncrementalVinculada(String campoConsultar1,
           String valorConsultar1, String campoConsultar2, String valorConsultar2) throws Exception {
      DefaultSelectionItems itens = new DefaultSelectionItems();
      itens.clear();
      int i = 0;

      try {
         Object obj = classeBO.newInstance();
         Method mtdDAO = classeBO.getMethod("getDAO");
         Method mtdCombo = classeBO.getMethod("montaListaVinculada", new Class[]{List.class});
         DAO dao = (DAO) mtdDAO.invoke(obj);
         List lista = dao.consultarIncremental(campoConsultar1, valorConsultar1,campoConsultar2, valorConsultar2);
         itens = (DefaultSelectionItems) mtdCombo.invoke(obj, lista);
         return itens;
      } catch (Exception ex) {
         throw new Exception(ex.getMessage());
      }
   }
   public DefaultSelectionItems montaComboPrevisao( int num) {
      DefaultSelectionItems itens = new DefaultSelectionItems();
      itens.clear();
      try {
         Object obj = classeBO.newInstance();
         Method mtdDAO = classeBO.getMethod("getDAO");
         DAO dao = (DAO) mtdDAO.invoke(obj);
         List lista = dao.consultarUmItem("associado.codAssociado", num);
         lista = validaLista.retiraDataRepetido(lista);
         Method pegaCombo = classeBO.getMethod("montaListaDetalhada", new Class[]{List.class});
         itens = (DefaultSelectionItems) pegaCombo.invoke(obj, lista);

      } catch (Exception ex) {

      }
      return itens;
   }
   public DefaultSelectionItems montaComboUsuario() {
      DefaultSelectionItems itens = new DefaultSelectionItems();
      itens.clear();
      try {
         Object obj = classeBO.newInstance();
         Method mtdDAO = classeBO.getMethod("getDAO");
         DAO dao = (DAO) mtdDAO.invoke(obj);
         List lista = dao.consultar();
         Method pegaCombo = classeBO.getMethod("montaLista", new Class[]{List.class});
         itens = (DefaultSelectionItems) pegaCombo.invoke(obj, lista);
      } catch (Exception ex) {

      }
      return itens;
   }

   public DefaultSelectionItems montaComboContaReceber( int num) {
      DefaultSelectionItems itens = new DefaultSelectionItems();
      itens.clear();
      try {
         Object obj = classeBO.newInstance();
         Method mtdDAO = classeBO.getMethod("getDAO");
         DAO dao = (DAO) mtdDAO.invoke(obj);
         List lista = dao.consultarUmItem("associado.codAssociado", num);
         Method pegaCombo = classeBO.getMethod("montaLista", new Class[]{List.class});
         itens = (DefaultSelectionItems) pegaCombo.invoke(obj, lista);
      } catch (Exception ex) {

      }
      return itens;
   }
}
